﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using System.Text;
using System.Data;
using SGC.BE;
using SGC.BL;
using SGC.BL.BL_CcuActualizarPlanAuditoria;

namespace SGC.Web.ModuloCalidad.Mantenimientos
{
    public partial class frmActualizarPlanAuditoria : System.Web.UI.Page
    {

        private BE_PlanAuditoria objPlan = null;
        private List<BE_PlanAuditor> lstAuditores;
        private String strError = "";

        protected void Page_Load(object sender, EventArgs e)
        {
            objPlan = new BE_PlanAuditoria();
            //lbl_Mensaje.Text = "";
            if (!IsPostBack)
            {           
                
                ddl_Procesos.SelectedIndexChanged -= new System.EventHandler(this.ddl_Procesos_SelectedIndexChanged);
                ddl_Procesos.DataSource = BL_CcuActualizarPlanAuditoria.obtenerProcesos_BL();
                ddl_Procesos.DataTextField = "NOMBRE";
                ddl_Procesos.DataValueField = "CODIGO_PROCESO";
                ddl_Procesos.DataBind();
                ddl_Procesos_SelectedIndexChanged(new Object(), new EventArgs());
                ddl_Procesos.SelectedIndexChanged += new System.EventHandler(this.ddl_Procesos_SelectedIndexChanged);

                String strPlan = Request.QueryString["Plan"];
                if (strPlan.Trim() != "")
                {
                    txt_CodigoPlan.Text = strPlan.Trim();
                }
                else
                {
                    txt_CodigoPlan.Text = BL_CcuActualizarPlanAuditoria.generarPlanAuditoria_BL(ddl_Procesos.SelectedValue, "").CODIGO_PLAN;
                }
                objPlan.CODIGO_PLAN = txt_CodigoPlan.Text;

                ddl_Auditores.DataSource = BL_CcuActualizarPlanAuditoria.obtenerAuditores_BL();
                ddl_Auditores.DataTextField = "NOMBRE_EMP";
                ddl_Auditores.DataValueField = "CODIGO_EMP";
                ddl_Auditores.DataBind();
                cargarDataGridAuditores();

               
                if (strPlan.Trim() != "")
                {
                    cargaDatosPlan();
                    ddl_Procesos.Enabled = false;
                }
                
            }
            objPlan.CODIGO_PLAN = txt_CodigoPlan.Text;
        }

        protected void btn_AdicionarAuditor_Click(object sender, EventArgs e)
        {
            BE_PlanAuditor objPlanAudi = new BE_PlanAuditor();
            objPlanAudi.AUDITOR = ddl_Auditores.SelectedValue.ToString();
            objPlanAudi.PLAN = txt_CodigoPlan.Text;
            objPlanAudi.LIDER = false;
            if (gv_Auditores.Rows.Count == 0)
            {
                objPlanAudi.LIDER = true;
            }

            int intResultado = BL_CcuActualizarPlanAuditoria.registrarPlanAuditor_BL(objPlanAudi, true, ref strError);
            cargarDataGridAuditores();            
        }

        protected void ddl_Procesos_SelectedIndexChanged(object sender, EventArgs e)
        {
            btnVerCheckList.Visible = false;
            btnGrabarPlan.Visible = false;

            BE_ProcesoArea objProcArea = new BE_ProcesoArea();
            BE_Proceso objProc = new BE_Proceso();
            objProc.CODIGO_PROCESO = ddl_Procesos.SelectedValue.ToString();
            objProcArea.PROCESO = objProc;


            DataTable tblProcesoArea = new DataTable();
            tblProcesoArea.Columns.Add("CODIGO_PROCESO", typeof(String));
            tblProcesoArea.Columns.Add("CODIGO_AREA", typeof(String));
            tblProcesoArea.Columns.Add("NOMBRE", typeof(String));
            DataRow drFila;
            List<BE_ProcesoArea> lstGrid = BL_CcuActualizarPlanAuditoria.obtenerProcesosAreas_BL(objProcArea);
            foreach (BE_ProcesoArea item in lstGrid)
            {
                drFila = tblProcesoArea.NewRow();
                drFila["CODIGO_PROCESO"] = item.PROCESO.CODIGO_PROCESO;
                drFila["CODIGO_AREA"] = item.AREA.CODIGO_AREA;
                drFila["NOMBRE"] = item.AREA.NOMBRE;
                tblProcesoArea.Rows.Add(drFila);
            }
            gv_ProcesoArea.DataSource = tblProcesoArea;
            gv_ProcesoArea.DataBind();

            BE_Procedimiento objProcedimiento = new BE_Procedimiento();
            objProcedimiento.CODIGO_PROCESO = ddl_Procesos.SelectedValue.ToString();
            gv_Procedimiento.DataSource = BL_CcuActualizarPlanAuditoria.obtenerProcedimientos_DL(objProcedimiento);
            gv_Procedimiento.DataBind();

            if (gv_ProcesoArea.Rows.Count > 0 && gv_Procedimiento.Rows.Count > 0)
            {
                btnVerCheckList.Visible = true;
                btnGrabarPlan.Visible = true;
            }
        }

        protected void VerCheckList_Click(object sender, EventArgs e)
        {
            String strProcedimientos = " ";
            BE_CheckListProcedimiento objProcChecklist = new BE_CheckListProcedimiento();
            Int16 intContador = 0;
            foreach (GridViewRow fila in gv_Procedimiento.Rows)
            {
                CheckBox chk = (CheckBox)fila.FindControl("chk_Procedimiento");
                if (chk.Checked)
                {
                    strProcedimientos += "'" + gv_Procedimiento.Rows[intContador].Cells[1].Text + "',";
                }
                intContador++;
            }

            objProcChecklist.CODIGO_PROC = strProcedimientos.Substring(0, strProcedimientos.Length - 1);
            gv_ProcedimientoChecklist.DataSource = BL_CcuActualizarPlanAuditoria.obtenerProcedimientosChecklist_BL(objProcChecklist);
            gv_ProcedimientoChecklist.DataBind();

            int intContadorFilas = 0;
            List<BE_DetallePlanAuditoria> lstDetalles = BL_CcuActualizarPlanAuditoria.obtenerCheckProcedimientoPlan_BL(objPlan);
            for (int i = 0; i < lstDetalles.Count; i++)
            {
                intContadorFilas = 0;
                foreach (GridViewRow fila in gv_ProcedimientoChecklist.Rows)
                {
                    if (gv_ProcedimientoChecklist.Rows[intContadorFilas].Cells[0].Text == lstDetalles[i].CODIGO_PROC &&
                        gv_ProcedimientoChecklist.Rows[intContadorFilas].Cells[3].Text == lstDetalles[i].CODIGO_CHECK)
                    {
                        CheckBox chk = (CheckBox)fila.FindControl("chk_ProcedimientoCheck");
                        chk.Checked = true;
                    }
                    intContadorFilas++;
                }
            }
        }

        protected void cmd_GrabarPlan_Click(object sender, EventArgs e)
        {
            DateTime dtFechaPlanAuditoria;
            try
            {
               dtFechaPlanAuditoria = DateTime.Parse(txt_Fecha.Text);               
            }
            catch (Exception ex)
            {
                enviarAlerta("Debe ingresar una fecha válida en el formato dd/mm/yyyy.");
                txt_Fecha.Focus();
                return;
            }

            TimeSpan ts = dtFechaPlanAuditoria - DateTime.Now;
            if (ts.Days < 0)
            {
                enviarAlerta("Debe ingresar una fecha igual o mayor a la fecha actual.");
                txt_Fecha.Focus();
                return;
            }

            Decimal dcmVersion = 0;
            try
            {
                dcmVersion = Decimal.Parse(txt_Version.Text);
            }
            catch (Exception ex)
            {
                enviarAlerta("Debe ingresar un valor numérico.");
                txt_Version.Focus();
                return;
            }

            if (dcmVersion <= 0)
            {
                enviarAlerta("Debe ingresar un valor mayor que 0.");
                txt_Version.Focus();
                return;
            }

            BE_PlanAuditoria objAuditoria = new BE_PlanAuditoria();
            objAuditoria.CODIGO_PLAN = txt_CodigoPlan.Text;
            objAuditoria.VERSION_PLAN = Decimal.Parse(txt_Version.Text);
            objAuditoria.FECHA = DateTime.Parse(txt_Fecha.Text);
            objAuditoria.ALCANCE = txt_Alcance.Text;
            objAuditoria.OBJETIVO = txt_Objetivo.Text;            
            lstAuditores = BL_CcuActualizarPlanAuditoria.obtenerAuditoresPorPlan_BL(objPlan);

            String strMensaje = BL_CcuActualizarPlanAuditoria.registrarPlanAuditoria_BL(objAuditoria, lstAuditores, ddl_Procesos.SelectedValue);
            if (strMensaje.Equals(""))
            {
                Boolean blFind = false;
                foreach (GridViewRow fila in gv_ProcesoArea.Rows)
                {
                    CheckBox chk = (CheckBox)fila.FindControl("chk_ProcesoArea");
                    if (chk.Checked)
                    {
                        blFind = true;
                        break;
                    }
                }
                if (!blFind)
                {
                    enviarAlerta("Debe seleccionar al menos un área.");
                }

                if (gv_ProcedimientoChecklist.Rows.Count == 0)
                {
                    enviarAlerta("Debe seleccionar al menos un procedimiento.");
                }

                blFind = false;
                foreach (GridViewRow fila in gv_ProcedimientoChecklist.Rows)
                {
                    CheckBox chk = (CheckBox)fila.FindControl("chk_ProcedimientoCheck");
                    if (chk.Checked)
                    {
                        blFind = true;
                        break;
                    }
                }
                if (!blFind)
                {
                    enviarAlerta("Debe seleccionar al menos un checklist.");
                }

                

                BE_DetallePlanAuditoria objDetalle;
                foreach (GridViewRow fila in gv_ProcedimientoChecklist.Rows)
                {
                    CheckBox chk = (CheckBox)fila.FindControl("chk_ProcedimientoCheck");
                    objDetalle = new BE_DetallePlanAuditoria();
                    objDetalle.CODIGO_PLAN = txt_CodigoPlan.Text;
                    objDetalle.CODIGO_CHECK = fila.Cells[3].Text;
                    objDetalle.CODIGO_PROC = fila.Cells[0].Text;
                    int intResultadoDetalle = BL_CcuActualizarPlanAuditoria.registrarDetallePlan_BL(objDetalle, chk.Checked, ref strError);
                }

                BE_PlanProcesoArea objPlanProcesoArea;
                Int16 intContadorProceso = 0;
                foreach (GridViewRow fila in gv_ProcesoArea.Rows)
                {
                    CheckBox chk = (CheckBox)fila.FindControl("chk_ProcesoArea");
                    objPlanProcesoArea = new BE_PlanProcesoArea();

                    BE_PlanAuditoria objPlan_n = new BE_PlanAuditoria();
                    objPlan_n.CODIGO_PLAN = txt_CodigoPlan.Text;

                    BE_Area objArea_n = new BE_Area();
                    objArea_n.CODIGO_AREA = fila.Cells[1].Text;

                    BE_Proceso objProces_n = new BE_Proceso();
                    objProces_n.CODIGO_PROCESO = fila.Cells[0].Text;

                    objPlanProcesoArea.PLAN_AUDITORIA = objPlan_n;
                    objPlanProcesoArea.AREA = objArea_n;
                    objPlanProcesoArea.PROCESO = objProces_n;
                    int intResultadoDetalle = BL_CcuActualizarPlanAuditoria.registrarPlanProcesoArea_BL(objPlanProcesoArea, chk.Checked, ref strError);
                    intContadorProceso++;
                }
                ScriptManager.RegisterStartupScript(this, this.GetType(), "_mensaje", "alert('Se actualizó el registro correctamente.');" +
                "location.href='fmrConsultarPlanAuditoria.aspx'", true);
                //StringBuilder strBuilder = new StringBuilder();
                //strBuilder.Append("~/ModuloCalidad/Mantenimientos/fmrConsultarPlanAuditoria.aspx");
                //Response.Redirect(strBuilder.ToString());
            }
            else
            {
                ScriptManager.RegisterStartupScript(this, this.GetType(), "_mensaje", "alert('" + strMensaje + "');", true);
            }
        }

        private void enviarAlerta(String Mensaje)
        {
            ScriptManager.RegisterStartupScript(this, this.GetType(), "_mensaje", "alert('" + Mensaje + "');", true);
        }

        private void cargaDatosPlan()
        {
            String str_Proceso = "";
            List<BE_ProcesoArea> lstProcesosAreasPlan = BL_CcuActualizarPlanAuditoria.obtenerProcesosAreasGrabados_BL(objPlan);
            foreach (BE_ProcesoArea proc in lstProcesosAreasPlan)
            {
                str_Proceso = proc.PROCESO.CODIGO_PROCESO;
                break;
            }
            ddl_Procesos.SelectedValue = str_Proceso;
            ddl_Procesos_SelectedIndexChanged(new Object(), new EventArgs());


            int intContadorFilas = 0;
            for (int i = 0; i < lstProcesosAreasPlan.Count; i++)
            {

                intContadorFilas = 0;
                foreach (GridViewRow fila in gv_ProcesoArea.Rows)
                {
                    if (gv_ProcesoArea.Rows[intContadorFilas].Cells[0].Text == lstProcesosAreasPlan[i].PROCESO.CODIGO_PROCESO &&
                        gv_ProcesoArea.Rows[intContadorFilas].Cells[1].Text == lstProcesosAreasPlan[i].AREA.CODIGO_AREA)
                    {
                        CheckBox chk = (CheckBox)fila.FindControl("chk_ProcesoArea");
                        chk.Checked = true;
                    }
                    intContadorFilas++;
                }
            }



            intContadorFilas = 0;
            List<BE_Procedimiento> lstProcedimientos = BL_CcuActualizarPlanAuditoria.obtenerDetallePlanAuditoria_BL(objPlan);
            for (int i = 0; i < lstProcedimientos.Count; i++)
            {
                intContadorFilas = 0;
                foreach (GridViewRow fila in gv_Procedimiento.Rows)
                {
                    if (gv_Procedimiento.Rows[intContadorFilas].Cells[1].Text == lstProcedimientos[i].CODIGO_PROC)
                    {
                        CheckBox chk = (CheckBox)fila.FindControl("chk_Procedimiento");
                        chk.Checked = true;
                    }
                    intContadorFilas++;
                }
            }

            if (lstProcedimientos.Count > 0)
            {
                VerCheckList_Click(new Object(), new EventArgs());
            }

            String strProcesoID = "";
            BE_PlanAuditoria objPlanCargado = BL_CcuActualizarPlanAuditoria.obtenerPlanCargado_BL(objPlan, ref strProcesoID);
            txt_Version.Text = objPlanCargado.VERSION_PLAN.ToString();
            txt_Fecha.Text = objPlanCargado.FECHA.ToString("yyyy-MM-dd");
            txt_Objetivo.Text = objPlanCargado.OBJETIVO;
            txt_Alcance.Text = objPlanCargado.ALCANCE;
            ddl_Procesos.SelectedValue = strProcesoID;
        }
        
        private void cargarDataGridAuditores()
        {
            lstAuditores = BL_CcuActualizarPlanAuditoria.obtenerAuditoresPorPlan_BL(objPlan);
            gv_Auditores.DataSource = lstAuditores;
            gv_Auditores.DataBind();

            lbl_MensajeAuditores.Visible = true;
            btn_EliminarAuditor.Enabled = true;
            if (gv_Auditores.Rows.Count == 0)
            {
                lbl_MensajeAuditores.Visible = false;
                btn_EliminarAuditor.Enabled = false;
            }

            var varDistinctConcepto = lstAuditores.Where(c => c.LIDER == true);
            foreach (var item in varDistinctConcepto)
            {
                for (int i = 0; i < lstAuditores.Count; i++)
                {
                    if (gv_Auditores.Rows[i].Cells[2].Text == item.AUDITOR)
                    {
                        RadioButton rb_Lider = (RadioButton)gv_Auditores.Rows[i].FindControl("rb_ElegirAuditor");
                        rb_Lider.Checked = true;
                        break;
                    }
                }
            }
        }

        protected void cmd_Salir_Click(object sender, EventArgs e)
        {
            string strEli = BL_CcuActualizarPlanAuditoria.generarPlanAuditoria_BL(ddl_Procesos.SelectedValue, txt_CodigoPlan.Text).CODIGO_PLAN;
            StringBuilder strBuilder = new StringBuilder();
            strBuilder.Append("~/ModuloCalidad/Mantenimientos/fmrConsultarPlanAuditoria.aspx");
            Response.Redirect(strBuilder.ToString());      
        }

        protected void btn_EliminarAuditor_Click(object sender, EventArgs e)
        {
            BE_PlanAuditor objPlanAudi = new BE_PlanAuditor();
            foreach (GridViewRow fila in gv_Auditores.Rows)
            {
                CheckBox CHK_Eleccion = (CheckBox)fila.FindControl("chk_EliminarAuditor");
                if (CHK_Eleccion.Checked)
                {
                    objPlanAudi.AUDITOR = fila.Cells[2].Text;
                    objPlanAudi.PLAN = fila.Cells[1].Text;
                    break;
                }
            }

            if (string.IsNullOrEmpty(objPlanAudi.AUDITOR.Trim()))
            {
                enviarAlerta("Debe seleccionar un auditor para eliminar.");
                return;
            }
            objPlanAudi.LIDER = false;
            int intResultado = BL_CcuActualizarPlanAuditoria.registrarPlanAuditor_BL(objPlanAudi, false, ref strError);
            cargarDataGridAuditores();
        }

        protected void rb_ElegirAuditor_CheckedChanged(object sender, EventArgs e)
        {
            BE_PlanAuditor objPlanAudi = new BE_PlanAuditor();
            objPlanAudi.PLAN = txt_CodigoPlan.Text;
            foreach (GridViewRow fila in gv_Auditores.Rows)
            {
                RadioButton rbt = (RadioButton)fila.FindControl("rb_ElegirAuditor");
                if (rbt.Checked)
                {
                    objPlanAudi.AUDITOR = fila.Cells[2].Text;
                    int intResultado = BL_CcuActualizarPlanAuditoria.actualizarAuditorLider_BL(objPlanAudi, true, ref strError);
                    break;
                }
            }
            cargarDataGridAuditores();
        }

    }
}